<?php

namespace app\admin\model;

use my\Redis;
use think\Model;
use app\admin\model\Admin as AdminModel;

class Login extends Model
{
    // admin模型对象
    private $admin;

    function initialize()
    {
        parent::initialize();
        $this->admin = new AdminModel();
    }

    /**
     * 登录操作
     */
    function login($param)
    {

        $id = $this->getUidByUsername($param['username']);
        // 判断用户名密码是否正确
        $result = $this->admin->isExists($id, $param['pwd']);

        if ($result == 1) { // 登录成功

            // 登录成功的用户
            $admin = AdminModel::get($id);

            // 需要免登陆
            if (!empty($param['rememberme'])) {
                // 获取token
                $token = $this->getToken();
                $key = $token . '_' . $id;

                // 过期时间
                $expire = 3600;

                // reids缓存到服务端
                $redis = new Redis();
                $redis::set('uid_' . $id . '_key', $key, $expire);

                // cookie缓存到客户端
                cookie('uid_' . $id . '_key', $key, $expire);
                cookie('uid_' . $id . '_name', $param['username'], $expire);
                cookie('uid_' . $id . '_icon', $admin['icon'], $expire);
            }

            // cookie存入用户的uid
            cookie('op_admin_uid', $id);

            // 不需要免登陆,存入session
            session('uid_' . $id, $id);
            session('uid_' . $id . '_name', $param['username']);
            session('uid_' . $id . '_icon', $admin['icon']);
        }

        // 1、登录成功
        // 2、账号或者密码错误
        // 3、被禁用
        // 4、被删除
        return $result;

    }

    /**
     * ajax通过用户id获取用户名
     * @param $username
     * @return 用户id
     */
    function getUidByUsername($username)
    {
        return $this->admin->getUidByUsername($username);
    }

    /**
     * 获取随机生成的token
     */
    function getToken()
    {
        $randomStr = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $token = '';

        for ($i = 0; $i < 10; $i++) {
            $randomNum = mt_rand(0, strlen($randomStr) - 1);
            $token .= $randomStr[$randomNum];
        }

        return $token;
    }

}